import csv

'''
建立一级知识库文件
此知识库用于匹配提取用户问题中的关键特征
建立关键词表, 提取用户问题关键词
'''


def create_region_word_list():
    """
    建立区域(水域)word-list, 只要区域名称
    :return:
    """
    with open(r'../Data/place.csv', 'r', encoding='utf-8') as f:
        '''
        "place.csv" 
                第一列为区域ID ---> :ID(区域)
                第二列为类型   ---> :LABEL
                第三列为区域名 --->  name
        '''
        # 用于存储地域的word-list
        space_name = []
        reader = csv.reader(f)
        for item in reader:
            # 第一行是标签, 直接跳过 
            if reader.line_num == 1:
                continue
            # 打印每行内容(只要第三列的区域内容)
            print('当前行数: ', reader.line_num, '当前内容: ', item[2])
            # 可能有重复数据, 添加前先进行判断
            if item[2] not in space_name:
                space_name.append(item[2])
        # 创建并写入到词表文件（一级知识库）
        write_to_file("place", space_name)


def create_fish_info_word_list():
    """
    建立鱼类信息word-list, 需要的信息包括： 🐟名称，🐟英文名称，（大类细分仅限中文）bio_phylum_cn（门），
    bio_class_cn（纲），bio_order_cn（目），bio_family_cn（科）
    :return:
    """
    with open('../Data/fish.csv', 'r', encoding='utf-8') as f:
        '''
        "fish.csv"
        :ID(鱼),:LABEL,name,fish_name_en, ... ,bio_introduction
        '''
        # 声明这些所需信息的list
        fish_name = []
        fish_name_en = []
        bio_phylum_cn = []
        bio_class_cn = []
        bio_order_cn = []
        bio_family_cn = []
        reader = csv.reader(f)
        for item in reader:
            # 第一行是标签, 直接跳过
            if reader.line_num == 1:
                continue
            # 可能有重复数据, 添加前先分别进行判断
            if item[2] not in fish_name:
                fish_name.append(item[2])
            if item[3] not in fish_name_en:
                fish_name_en.append(item[3])
            if item[8] not in bio_phylum_cn:
                bio_phylum_cn.append(item[8])
            if item[10] not in bio_class_cn:
                bio_class_cn.append(item[10])
            if item[12] not in bio_order_cn:
                bio_order_cn.append(item[12])
            if item[12] not in bio_family_cn:
                bio_family_cn.append(item[12])
        # 创建并写入到词表文件（一级知识库）
        write_to_file('fish_name', fish_name)
        write_to_file('fish_name_en', fish_name_en)
        write_to_file('bio_phylum_cn', bio_phylum_cn)
        write_to_file('bio_class_cn', bio_class_cn)
        write_to_file('bio_order_cn', bio_order_cn)
        write_to_file('bio_family_cn', bio_family_cn)


def write_to_file(file_name, word_list):
    """
    写词表文件通用函数
    :param file_name:
    :param word_list:
    :return:
    """
    with open('./L1_Knowledge_base/' + file_name + '.txt', 'w+', encoding='utf-8') as f:
        f.write('\n'.join(list(word_list)))


if __name__ == '__main__':
    create_region_word_list()
    create_fish_info_word_list()